CREATE OR REPLACE PACKAGE BODY PA_AUTEUR
IS
	current_auteur auteur%ROWTYPE;

	-- Get tous les auteurs :

	FUNCTION GetAll RETURN sqlcur
	IS
		c1 sqlcur;
	BEGIN
		OPEN c1 FOR
			select * from auteur aut order by aut.nom_auteur;
		RETURN c1;
	END;
	
	FUNCTION GetAllForSpectacle (p_num_spectacle in number) return sqlcur
        IS
            c1 sqlcur;
    BEGIN
        OPEN c1 FOR
            SELECT 
				AUTEUR.*
            FROM 
				ECRIRE 
				INNER JOIN AUTEUR
					ON AUTEUR.NUM_AUTEUR = ECRIRE.NUM_AUTEUR
			WHERE
				ECRIRE.NUM_SPECTACLE = p_num_spectacle
            ORDER BY 1;
        RETURN c1;
    END GetAllForSpectacle;
	
	-- Get auteur by num_auteur :
	
	FUNCTION Get(p_num_auteur in number)
		RETURN auteur%ROWTYPE
	IS
		CURSOR c_auteur(numauteur in number)
		IS
			SELECT * FROM AUTEUR WHERE NUM_AUTEUR = numauteur;
	BEGIN
		OPEN c_auteur(p_num_auteur);
		FETCH c_auteur INTO current_auteur;

		IF c_auteur%NOTFOUND THEN
			RAISE NO_DATA_FOUND;
		END IF;

		CLOSE c_auteur;
		RETURN current_auteur;
	END;

	-- Add auteur :

	PROCEDURE Add
	(
		p_nom_auteur in VARCHAR2,
		p_prenom_auteur in VARCHAR2
	)
	AS
	BEGIN
		INSERT INTO AUTEUR (NUM_AUTEUR, NOM_AUTEUR, PRENOM_AUTEUR)
		VALUES (SEQ_AUTEUR.nextval, p_nom_auteur, p_prenom_auteur);
		COMMIT;
	END;

	-- Update auteur :

	PROCEDURE Upd
	(
		p_num_auteur NUMBER,
		p_nom_auteur in VARCHAR2,
		p_prenom_auteur in VARCHAR2
	)
	AS
	BEGIN
    	UPDATE AUTEUR
		SET NOM_AUTEUR=p_nom_auteur, PRENOM_AUTEUR=p_prenom_auteur
		WHERE NUM_AUTEUR=p_num_auteur;
    	COMMIT;
	END;	

	-- Delete auteur :

	PROCEDURE Del (p_num_auteur IN NUMBER)
	AS
	BEGIN
    	DELETE FROM AUTEUR
		WHERE NUM_AUTEUR=p_num_auteur;
    	COMMIT;
	end;	

END PA_AUTEUR;
/